class Student {
    public String name = "wsw";
    public int age;
    //非静态成员变量/普通成员变量
    //初始化：直接赋值
    public static String classRoom = "107java直播间";//上课教室
    //静态成员变量/类变量或类成员 推荐使用类名访问
    //静态的不依赖对象

    private static int size;//默认初始化

    public static int getSize() {
        return size;
    }
    //获取静态的成员变量或者是设置静态的成员变量，
    //此时方法最好是静态的，如果是非静态，还要实例化对象
    public static void setSize(int size) {
        Student.size = size;
    }

    static {
        //初始化静态的数据成员/提前准备一些数据
        System.out.println("静态代码块");//只被执行了一次
    }
    {
        name = "hhh";
        System.out.println("非静态代码块/实例代码块/构造代码块");
        System.out.println("作用：初始化非静态的数据成员");
    }
    //如果都是非静态的 那么看定义的顺序 谁在后 最后就是哪个值


    public Student() {
        System.out.println("不带参数的构造方法");
    }

    public Student(String name, int age) {//构造方法
        this.name = name;
        this.age = age;
        System.out.println("带有2个参数的构造方法");
    }



    public Student(String name, int age,int si) {//构造方法
        this.name = name;
        this.age = age;
        size = si;
        //在构造对象的时候，可以在构造方法中可以赋值
        //不建议这么写
    }

    public void doClass() {//非静态成员方法
        //普通成员方法内部是可以使用静态的成员方法的
        func();
        System.out.println(name+"上课");
    }

    public static void func() {//静态成员方法/类方法
        //在静态方法内部 不能够直接使用非静态的数据成员
        /*System.out.println(this.name);
        静态方法里面是不能够使用this
        System.out.println(name);*/
        //只要是非静态的数据成员 都需要通过对象的引用才能调用
        //Student student = new Student("bit",18);
        //System.out.println(student.name);
        System.out.println("staticFunc()");

        {
            int a = 10;
            //这块代码的执行 不需要条件
            System.out.println("定义在方法内部的代码块！普通代码块");
        }
        //System.out.println(a);
    }
    public static void func2() {//静态成员方法/类方法
        Student.func();
        func();
        System.out.println("staticFunc()");
    }
}
public class Test2 {

    public static void main(String[] args) {
        //只要这个类被加载 静态代码块都会被执行
        Student student1 = new Student();
        System.out.println("===========");
        Student student2 = new Student();
    }

    public static void main9(String[] args) {
        //Student student = new Student("hyj",10);
        Student student = new Student();
        //System.out.println(student.name);
    }

    public static void main8(String[] args) {
        Student.func();
    }

    public static void main7(String[] args) {
        Student student1 = new Student("hyj",10,9);
        System.out.println(Student.getSize());
    }

    public static void main6(String[] args) {
        Student.func();
        System.out.println(Student.getSize());
    }

    public  void mainStaticFunc() {

    }

    public static void main5(String[] args) {
        //在静态方法内部 不能直接调用非静态方法
        /*Test2 test2 = new Test2();对象的引用
        test2.mainStaticFunc();*/
        //mainStaticFunc();
    }


    public static void main3(String[] args) {
        Student student1 = new Student("hyj",10);
        student1.doClass();
        student1.func();
    }

    public static void main2(String[] args) {
        Student student1 = null;
        System.out.println(student1.classRoom);
        System.out.println(Student.classRoom);
        //静态的成员变量不属于对象 所以不用通过对象的引用来访问
        //直接可以通过类名访问
    }
    public static void main1(String[] args) {
        Student student1 = new Student("hyj",18);
        Student student2 = new Student("hyj2",17);
        Student student3 = new Student("hyj3",15);
        System.out.println(student1.classRoom);//警告
        System.out.println("false");
    }
}
